home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / AESOBJEC.D < prev    next >
Encoding:
Modula Definition  |  1990-10-09  |  6.8 KB  |  176 lines

  1. DEFINITION MODULE AESObjects;
  2.  
  3.  
  4. (*  Megamax-Modula 2 GEM-Library :  Die AES Objektfunktionen
  5.  *
  6.  *  Autor: Manuel Chakravarty           Erstellt :  05.11.87
  7.  *
  8.  *  Version   2.2     V#0010
  9.  *)
  10.  
  11. (*      In diesem Modul befinden sich die AES Routinen, die zur allgemeinen
  12.  *      Manipulation von Objektbäumen dienen.
  13.  *)
  14.  
  15.  
  16. FROM    GrafBase   IMPORT Point, Rectangle;
  17.  
  18. FROM    GEMGlobals IMPORT PtrObjTree, OStateSet, GemChar;
  19.  
  20.  
  21.                 (*  Object Manager  *)
  22.                 (*  ==============  *)
  23.  
  24. PROCEDURE AddObject (tree: PtrObjTree; parent, child: CARDINAL);
  25.  
  26.         (*  Ein Objekt wird in die Nachfolgerliste eines anderen
  27.          *  eingereiht.
  28.          *
  29.          *  Eingabeparameter
  30.          *  ----------------
  31.          *
  32.          *  'child'     -- Index des Objekts, das in die Nachfolger-
  33.          *                 liste von
  34.          *  'parent'    -- eingereiht wird.
  35.          *  'tree'      -- Sowohl 'parent' als auch 'child' muß
  36.          *                 Element diese Objekbaumes sein.
  37.          *)
  38.         
  39. PROCEDURE DeleteObject (tree: PtrObjTree; index: CARDINAL);
  40.  
  41.         (*  Ein Objekt wird aus einem Objektbaum entfernt.
  42.          *
  43.          *  'index'     -- Das zu entferndende Objekt
  44.          *  'tree'      -- Der Objektbaum, dessen Element 'index' sein muß.
  45.          *)
  46.  
  47. PROCEDURE DrawObject (tree       : PtrObjTree;
  48.                       start,depth: CARDINAL;
  49.                       frame      : Rectangle);
  50.                       
  51.         (*  Ein Objektbaum wird bis zu der gewünschten Tiefe auf dem
  52.          *  Bildschirm dargestellt. Es werden nur die Teile sichtbar,
  53.          *  die sich innerhalb eines angegebenen Rahmens befinden.
  54.          *  Diese Routine dient zum Beispiel zum Zeichnen von Dialogboxen.
  55.          *
  56.          *  'tree'      -- Der darzustellende Baum
  57.          *  'start'     -- Der Index, ab dem der Baum dargestellt werden
  58.          *                 soll.
  59.          *  'depth'     -- Bis zu dieser Tiefe wird der Baum dargestellt.
  60.          *  'frame'     -- Es werden die Teile sichtbar, die in diesem
  61.          *                 Rahmen liegen.
  62.          *
  63.          *  Für 'depth' gilt:
  64.          *
  65.          *      0          -- Es wird nur das Startobjekt untersucht
  66.          *      1          -- Startobjekt und die erste Ebene von Nachfolgern
  67.          *      .
  68.          *      .
  69.          *      .
  70.          *  'MaxDepth'     -- Maximale Tiefe
  71.          *
  72.          *  'MaxDepth' kann aus 'GEMGlobals' importiert werden.
  73.          *)
  74.         
  75. PROCEDURE FindObject (tree        : PtrObjTree;
  76.                       start, depth: CARDINAL;
  77.                       spot        : Point     ): CARDINAL;
  78.                       
  79.         (*  Diese Prozedur sucht ein Objekt in einem Baum, das sich beim
  80.          *  darstellen des Baumes an einer bestimmten Stellen auf dem
  81.          *  Bildschirm befindet. Als Ergebnis wird der Index des Objekts
  82.          *  geliefert.
  83.          *
  84.          *  'tree'      -- Der Objektbaum
  85.          *  'spot'      -- Bezeichnet die Stelle, an der das Objekt auf
  86.          *                 dem Bildschirm befindet.
  87.          *  'start'     -- Die Suche im Baum beginnt bei diesem Index
  88.          *  'depth'     -- Die Suchtiefe
  89.          *
  90.          *  Wird 'GEMGlobals.NoObject' zurückgegeben, so befindet sich
  91.          *  an dieser Stelle kein Objekt. Zu 'depth' siehe 'DrawObject'.
  92.          *)
  93.  
  94. PROCEDURE ObjectOffset (tree: PtrObjTree; index: CARDINAL): Point;
  95.  
  96.         (*  Diese Funktion liefert die Bildschirmposition auf der ein
  97.          *  Objekt beim Zeichnen seines Baumes dargestellt wird.
  98.          *
  99.          *  'index'     -- Index des Objekts
  100.          *  'tree'      -- der Objektbaum
  101.          *)
  102.  
  103. PROCEDURE ObjectOrder (tree  : PtrObjTree;
  104.                        index : CARDINAL;
  105.                        newPos: INTEGER   );
  106.                        
  107.         (*  Ein Objekt wird in seiner Nachfolgerliste an ein neue Posi-
  108.          *  tion bewegt.
  109.          *
  110.          *  'tree'      -- der Objektbaum
  111.          *  'index'     -- das Objekt
  112.          *
  113.          *  Die Position wird von 'newPos' folgendermaßen bestimmt:
  114.          *
  115.          *    0    -- An die erste Stelle
  116.          *    1    -- An die zweite Stelle
  117.          *   usw.
  118.          *
  119.          *   -1    -- An die letzte Stelle
  120.          *)
  121.         
  122.  
  123. TYPE    EditObjMode     = (startEdit, initEdit, charEdit, endEdit);
  124.         
  125. PROCEDURE EditObjText (    tree   : PtrObjTree;
  126.                            index  : CARDINAL;
  127.                            ch     : GemChar;
  128.                        VAR charPos: CARDINAL;
  129.                            edKind : EditObjMode);
  130.                       
  131.         (*  Diese Routine macht einen Teil der Arbeit, die bei Edieren
  132.          *  eines Edit-Feldes vom Anwender anfällt.
  133.          *
  134.          *  'tree'      -- der Objektbaum
  135.          *  'index'     -- das zu edierende Objekt
  136.          *
  137.          *  Weiter sind vier Modi zu unterscheiden:
  138.          *  'startEdit' -- Wird in dieser GEM Version nicht unterstützt
  139.          *  'initEdit'  -- Objektzeichenketten formatieren und Textcursor
  140.          *                 einschalten
  141.          *  'charEdit'  -- Ein Zeichen verarbeiten und dabei die Zeichen-
  142.          *                 ketten und den Bildschirm aktuallisieren
  143.          *  'endEdit'   -- Ende des Ediervorganges
  144.          *
  145.          *  Vor dem Aufruf dieser Routine muß sich das Objekt schon auf
  146.          *  dem Bildschirm befinden. Außerdem muß es vom Typ 'fText'
  147.          *  oder 'fBoxText' sein.
  148.          *  Im 'charEdit'-Modus muß in 'ch' das Zeichen übergeben werden,
  149.          *  das an der Position 'charPos' in die Textzeichenkette des
  150.          *  Objektes, eingefügt werden soll. Bei der Rückkehr steht in
  151.          *  'charPos' daraufhin die Zeichenposition, in die als nächste
  152.          *  etwas geschrieben werden sollte. Die Routine wertet auch
  153.          *  teilweise Tasten wie zum Beispiel Escape und Backspace aus.
  154.          *)
  155.         
  156. PROCEDURE ChangeObjState (tree    : PtrObjTree;
  157.                           index   : CARDINAL;
  158.                           frame   : Rectangle;
  159.                           newState: OStateSet;
  160.                           redraw  : BOOLEAN);
  161.                          
  162.         (*  Diese Prozedur dient zum Ändern des Objektstatus eines Objektes
  163.          *
  164.          *  'index'     -- Index des Objekts
  165.          *  'tree'      -- der Objektbaum
  166.          *  'newState'  -- der neue Status
  167.          *  'reDraw'    -- 'TRUE': das Objekt wird zusätzlich neu gezeichnet
  168.          *                 es sollte sich aber in diesem Fall schon auf dem
  169.          *                 Bildschirm befinden.
  170.          *
  171.          *  Es ist darauf zu achten, daß pro Aufruf dieser Routine nur ein
  172.          *  Element der Statusmenge geändert wird.
  173.          *)
  174.         
  175.  
  176. END AESObjects.